[Spring-3] Spring MVC와 Spring의 구조
📦

[Spring-3] Spring MVC와 Spring의 구조

Lecture
Framework
태그
spring
mvc
public
완성
Y
생성일
Mar 17, 2024 12:28 PM
LectureName
Spring
 

1. Spring MVC


Spring MVC는 자바 기반의 웹 프레임워크로, 웹 어플리케이션 개발에 매우 유용합니다. Spring MVC는 Model-View-Controller(MVC) 디자인 패턴을 적용한 프레임워크입니다.
 
 

2. Model-View-Controller(MVC) 패턴


MVC 패턴은 어플리케이션의 로직을 Model과 View, Controller로 구분합니다. 이 패턴을 사용하면 코드의 재사용성과 유지보수성이 향상됩니다.

2.1 Model

Model은 어플리케이션의 데이터와 비즈니스 로직을 담당합니다. 데이터는 데이터베이스나 파일 시스템 등에서 가져와서 처리합니다.

2.2 View

View는 사용자에게 보여지는 UI를 담당합니다. HTML, JSP, Thymeleaf 등의 템플릿 엔진을 사용해서 View를 구현합니다.

2.3 Controller

Controller는 Model과 View를 연결하는 역할을 합니다. 사용자의 요청을 받아서 적절한 Model과 View를 선택하고, 데이터를 전달하고 받습니다.
 
 

3. Spring MVC 구성 요소


Spring MVC는 다음과 같은 구성 요소로 이루어져 있습니다.

3.1 DispatcherServlet

  • DispatcherServlet은 모든 요청을 받아서 적절한 Controller로 요청을 전달합니다.

3.2 HandlerMapping

  • HandlerMapping은 요청을 처리할 Controller를 선택합니다.
  • @RequestMapping, @Controller, @RestController

3.3 Controller

  • Controller는 요청을 처리하고, Model에 데이터를 전달하며, View를 선택합니다.

3.4 ViewResolver

  • ViewResolver는 Controller에서 선택한 View를 찾아서 제공합니다.

3.5 View

  • View는 응답으로 보낼 화면을 생성합니다.
 
 

4. Spring MVC 도식화

notion image
핸들러 어댑터 (Handler Adapter)
  • 핸들러 어댑터는 DispatcherServlet에서 실행할 수 있는 컨트롤러가 있는지 확인하고, 해당 컨트롤러가 실행될 수 있도록 도와줍니다.
  • 핸들러 어댑터는 HandlerAdapter 인터페이스를 구현하여 커스터마이징할 수 있습니다.
  • Spring MVC에서 제공하는 기본 핸들러 어댑터는 다음과 같습니다.
    • SimpleServletHandlerAdapter
    • HttpRequestHandlerAdapter
    • SimpleControllerHandlerAdapter
    • AnnotationMethodHandlerAdapter
 

2. ModelAndView

  • ModelAndView는 컨트롤러가 처리한 결과 데이터와 뷰에 대한 정보를 담고 있습니다.
  • ModelAndView 객체를 생성하여 View 이름과 Model을 설정한 후 반환하게 됩니다.
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView("hello"); modelAndView.addObject("message", "Hello Spring MVC"); return modelAndView; }

3. ViewResolver

  • ViewResolver는 컨트롤러에서 반환한 View 이름을 기반으로 실제로 사용할 View 객체를 찾아줍니다.
  • ViewResolver 인터페이스를 구현하여 커스터마이징할 수 있습니다.
  • Spring MVC에서는 다음과 같은 ViewResolver를 제공합니다.
    • InternalResourceViewResolver
    • ResourceBundleViewResolver
    • XmlViewResolver
    • FreeMarkerViewResolver
    • VelocityViewResolver
    • ThymeleafViewResolver
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>
  • 위는 JSP를 사용하는 경우의 InternalResourceViewResolver를 설정한 예시입니다.
  • prefix와 suffix를 설정해 줌으로써 JSP 파일을 찾아서 렌더링할 수 있습니다.
 
 

5. Spring MVC 예제

Spring MVC를 사용해서 간단한 예제를 만들어보겠습니다.

의존성 추가

implementation 'org.springframework:spring-webmvc:5.3.10'

5.1 Controller 작성

@Controller public class HomeController { @GetMapping("/") public String home(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "home"; } }

5.2 View 작성

<!DOCTYPE html> <html> <head> <title>Spring MVC Example</title> </head> <body> <h1>${message}</h1> </body> </html>
  • 위는 예시이고, JSP나 Thymeleaf를 써서 서버사이드 렌더링을 진행해야 합니다.
  • Spring같은 경우에는 Thymeleaf를 적극 지원하고 있습니다.
 
컴포넌트 스캔이란? (1)